import matplotlib.pyplot as plt

# 模拟数据
models = ['随机森林回归', '决策树回归']
mse_values_rf = [26.19, 52.49]  # MSE值
r2_values_rf = [0.88, 0.75]  # R²值
features_rf = ['体重', 'BMI', '体力活动', '药物依从性', '压力水平', '日期天数']
feature_importances_rf = [0.15, 0.4, 0.25, 0.1, 0.05, 0.05]  # 特征重要性
y_test_rf = [20, 30, 40, 50, 60]  # 实际值
y_pred_rf = [21, 29, 39, 52, 59]  # 预测值

# 设置字体支持中文
from matplotlib import rcParams
rcParams['font.sans-serif'] = ['SimHei']
rcParams['axes.unicode_minus'] = False

# 1. 随机森林预测结果对比图
plt.figure(figsize=(10, 6))
plt.scatter(y_test_rf, y_pred_rf, color='blue', label='随机森林回归预测值')
plt.plot([min(y_test_rf), max(y_test_rf)], [min(y_test_rf), max(y_test_rf)], color='red', linestyle='--', label='理想预测线')
plt.xlabel('实际值', fontsize=14)
plt.ylabel('预测值', fontsize=14)
plt.title('随机森林回归 - 实际值与预测值对比', fontsize=16)
plt.legend(fontsize=12)
plt.show()

# 2. 随机森林特征重要性图
plt.figure(figsize=(10, 6))
plt.barh(features_rf, feature_importances_rf, color='green')
plt.xlabel('特征重要性', fontsize=14)
plt.ylabel('特征', fontsize=14)
plt.title('随机森林回归 - 特征重要性', fontsize=16)
plt.show()

# 3. 模型性能对比图
fig, ax1 = plt.subplots(figsize=(10, 6))

# MSE对比
ax1.bar(models, mse_values_rf, color='skyblue', label='MSE')
ax1.set_xlabel('模型', fontsize=14)
ax1.set_ylabel('MSE', color='skyblue', fontsize=14)
ax1.tick_params(axis='y', labelcolor='skyblue')

# R²对比
ax2 = ax1.twinx()
ax2.plot(models, r2_values_rf, color='orange', marker='o', label='R²', linestyle='--')
ax2.set_ylabel('R²', color='orange', fontsize=14)
ax2.tick_params(axis='y', labelcolor='orange')

plt.title('模型性能对比：MSE与R²', fontsize=16)
plt.show()
